package org.etnaframework.module.cron;

import java.lang.annotation.*;

/**
 * 定时任务组件，加到想要定时执行的方法上就可以了，注意最小单位是秒
 *
 * @author jasyaf
 * @since 2024-04-06
 */
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Crontab {

    /**
     * 和类UNIX系统上的cron表达式语法一样，只是第一列多了秒
     * 例如 10 * * * * MON-FRI 表示 从周一到周五，每分钟的第10秒 执行
     * <p>
     * 注意：
     * 1、如果本次任务执行尚未结束，却到了下一次触发的时间点，这种情况下一次任务时会跳过不执行，本次任务仍继续执行
     * 2、集群模式下，如果同一个方法上cron周期跟其他执行的实例不同，在本机触发检查时会发出告警
     */
    String cron();

    /**
     * 运行模式（注意：集群模式部署时，需要保证每个实例时间同步！！）
     */
    CronRunModeEnum runMode();

    /**
     * 任务执行超时时限，单位秒，如果超时了会触发{@link ICronCustomizer#onTimeout(String, long)}，如果此项不设置或设置为<=0的值则不做超时检验
     */
    long timeoutSec() default -1;
}
